home *** CD-ROM | disk | FTP | other *** search
Text File | 1997-04-14 | 7.5 KB | 293 lines | [TEXT/MPS ] |
- //----------------------------------------------------------------------------------------
- // CTidyHeapFile_AC.cp
- // Copyright © 1984-97 by Apple Computer, Inc. All rights reserved.
- //----------------------------------------------------------------------------------------
-
- #ifndef __CTidyHeap_AC__
- #include "CTidyHeap_AC.h"
- #endif
-
- #if qTidyHeap
-
- #ifndef _STRING
- #include <string.h>
- #endif
-
- // toolbox
-
- #ifndef __ERRORS__
- #include <Errors.h>
- #endif
-
- #ifndef __TEXTUTILS__
- #include <TextUtils.h>
- #endif
- // tidyheap
-
- #ifndef __CTidyHeapFile_AC__
- #include "CTidyHeapFile_AC.h"
- #endif
-
- //========================================================================================
- // class CTidyHeapFile_AC
- //========================================================================================
-
- //----------------------------------------------------------------------------------------
- // Default Constructor
- //----------------------------------------------------------------------------------------
-
- CTidyHeapFile_AC::CTidyHeapFile_AC() :
- fErr(0),
- fRef(0)
- {
- fType = 'TEXT';
- fCreator = 'MPS ';
-
- CTidyHeap_AC::Instance()->GetSessionFileLoc(fSpec.vRefNum,fSpec.parID);
-
- StringPtr sName = (StringPtr) CTidyHeap_AC::Instance()->GetSessionName();
-
- pstrcpy(fSpec.name,sName);
- }
-
- //----------------------------------------------------------------------------------------
- // Copy Constructor
- //----------------------------------------------------------------------------------------
-
- CTidyHeapFile_AC::CTidyHeapFile_AC(const CTidyHeapFile_AC &inFile)
- {
- *this = inFile;
- }
-
- //----------------------------------------------------------------------------------------
- // Conversion Constructor
- //----------------------------------------------------------------------------------------
-
- CTidyHeapFile_AC::CTidyHeapFile_AC(const FSSpec &inSpec) :
- fErr(0),
- fRef(0)
- {
- fType = 'TEXT';
- fCreator = 'MPS ';
- CopySpec( &fSpec, &inSpec );
- }
-
- //----------------------------------------------------------------------------------------
- // Destructor
- //----------------------------------------------------------------------------------------
-
- CTidyHeapFile_AC::~CTidyHeapFile_AC()
- {
- if(IsOpen())
- Close();
- }
-
- //----------------------------------------------------------------------------------------
- // CTidyHeapFile_AC::Open
- //----------------------------------------------------------------------------------------
-
- void CTidyHeapFile_AC::Open(ePerms inPerms)
- {
- if( !fRef )
- {
- char perms = inPerms == kRead ? fsRdPerm : fsRdWrPerm;
-
- fErr = ::FSpOpenDF( &fSpec, perms, &fRef);
-
- if(fErr == fnfErr && perms == fsRdWrPerm)
- {
- fErr = ::FSpCreate( &fSpec,fCreator, fType, 0);
-
- if(!fErr)
- fErr = ::FSpOpenDF( &fSpec, perms, &fRef);
- }
-
-
- if(!fErr)
- {
- if(inPerms == kAppend)
- fErr = ::SetFPos(fRef,fsFromLEOF,0);
- else
- if(inPerms == kWrite)
- fErr = ::SetEOF(fRef, 0);
- }
- }
- }
-
-
- //----------------------------------------------------------------------------------------
- // CTidyHeapFile_AC::Close
- //----------------------------------------------------------------------------------------
-
- void CTidyHeapFile_AC::Close()
- {
- if(fRef)
- {
- fErr = FSClose(fRef);
- if(!fErr) fRef = 0;
- }
- }
-
- //----------------------------------------------------------------------------------------
- // CTidyHeapFile_AC::Read
- //----------------------------------------------------------------------------------------
-
- long CTidyHeapFile_AC::Read(char *data, long size )
- {
- if(fRef)
- fErr = ::FSRead( fRef, &size, (Ptr) data );
- else
- fErr = fnOpnErr;
-
- return size;
- }
-
- //----------------------------------------------------------------------------------------
- // CTidyHeapFile_AC::Write
- //----------------------------------------------------------------------------------------
-
- long CTidyHeapFile_AC::Write( const char *data, long size )
- {
- if(fRef)
- fErr = ::FSWrite( fRef, &size, data );
- else
- fErr = fnOpnErr;
-
- return size;
- }
-
- //----------------------------------------------------------------------------------------
- // CTidyHeapFile_AC::ReadObject
- //----------------------------------------------------------------------------------------
-
- void CTidyHeapFile_AC::ReadObject(MTidyHeapPersistantObject_AC &inClass )
- {
- fErr = 0;
- Boolean doOpen = !IsOpen();
-
- if(doOpen) Open( kRead );
-
- if(!fErr)
- {
- inClass.Read(this);
- if(doOpen) Close();
- }
- }
-
- //----------------------------------------------------------------------------------------
- // CTidyHeapFile_AC::WriteObject
- //----------------------------------------------------------------------------------------
-
- void CTidyHeapFile_AC::WriteObject(MTidyHeapPersistantObject_AC &inClass)
- {
- fErr = 0;
- Boolean doOpen = !IsOpen();
-
- if(doOpen) Open( kWrite );
-
- if(!fErr)
- {
- inClass.Write(this);
- if(doOpen) Close();
- }
- }
-
- //----------------------------------------------------------------------------------------
- // CTidyHeapFile_AC::SetTypeAndCreator
- //----------------------------------------------------------------------------------------
-
- void CTidyHeapFile_AC::SetTypeAndCreator(OSType inType, OSType inCreator)
- {
- fType = inType;
- fCreator = inCreator;
- }
-
- //----------------------------------------------------------------------------------------
- // CTidyHeapFile_AC::SetSpec
- //----------------------------------------------------------------------------------------
-
- void CTidyHeapFile_AC::SetSpec( const FSSpec &inSpec )
- {
- CopySpec( &fSpec, &inSpec );
- }
-
- //----------------------------------------------------------------------------------------
- // CTidyHeapFile_AC assignment operator
- //----------------------------------------------------------------------------------------
-
- CTidyHeapFile_AC &CTidyHeapFile_AC::operator = (const CTidyHeapFile_AC &inFile)
- {
- fErr = 0;
- fRef = 0;
- fType = inFile.fType;
- fCreator = inFile.fCreator;
- CopySpec( &fSpec, &inFile.fSpec);
- return *this;
- }
-
- //----------------------------------------------------------------------------------------
- // CTidyHeapFile_AC::SetName
- //----------------------------------------------------------------------------------------
-
- void CTidyHeapFile_AC::SetName( const unsigned char* inName)
- {
- #if qDebugTidyHeap
- if(*inName > 31)
- DebugStr("\pName too long");
- #endif
-
- pstrcpy( fSpec.name, inName );
- }
-
- //----------------------------------------------------------------------------------------
- // CTidyHeapFile_AC::SetVolRefNum
- //----------------------------------------------------------------------------------------
-
- void CTidyHeapFile_AC::SetVolRefNum( short inId)
- {
- fSpec.vRefNum = inId;
- }
-
- //----------------------------------------------------------------------------------------
- // CTidyHeapFile_AC::SetDirID
- //----------------------------------------------------------------------------------------
-
- void CTidyHeapFile_AC::SetDirID( long inId )
- {
- fSpec.parID = inId;
- }
-
- //----------------------------------------------------------------------------------------
- // CTidyHeapFile_AC::GetSize
- //----------------------------------------------------------------------------------------
-
- long CTidyHeapFile_AC::GetSize()
- {
- long eof;
- fErr = ::GetEOF(fRef,&eof);
- return eof;
- }
-
- //----------------------------------------------------------------------------------------
- // CTidyHeapFile_AC::AppendExtension
- //----------------------------------------------------------------------------------------
-
- void CTidyHeapFile_AC::AppendExtension(const char* inExtension)
- {
- ::p2cstr(fSpec.name);
-
- const short maxLen = 28;
-
- short len = ::strlen((char*) fSpec.name);
-
- if( len >= maxLen)
- {
- fSpec.name[maxLen] = '\0';
- len = maxLen;
- }
-
- ::strcat((char*) fSpec.name, inExtension);
- ::c2pstr((char*)fSpec.name);
- }
-
- #endif